package com.usian.user.service.impl;

import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.usian.common.exception.CatchCustomException;
import com.usian.common.exception.code.UserStatusCode;
import com.usian.model.common.dtos.PageResponseResult;
import com.usian.model.common.dtos.ResponseResult;
import com.usian.model.common.enums.AppHttpCodeEnum;
import com.usian.model.user.dtos.AuthDto;
import com.usian.model.user.pojos.ApUserRealname;
import com.usian.user.mapper.ApUserRealnameMapper;
import com.usian.user.service.ApUserRealnameService;
import com.usian.user.utils.YongYouYunAuthUtils;
import org.apache.catalina.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;

import javax.ws.rs.POST;
import java.util.HashMap;
import java.util.Map;

@Service
@SuppressWarnings("ALL")
public class ApUserRealnameServiceImpl extends ServiceImpl<ApUserRealnameMapper,ApUserRealname> implements ApUserRealnameService {
    @Autowired
    private ApUserRealnameMapper apUserRealnameMapper;

    /**
     * 根据用户状态查询需要认证相关的用户信息
     * @param dto
     * @return
     */
    @Override
    public ResponseResult loadListByStatus(AuthDto dto) {
        //参数为空
        if (dto == null){
             CatchCustomException.catchs(UserStatusCode.PARAM_FAIL,"参数非法");
        }
        //检查参数（分页数据初始化）
        dto.checkParam();
        //条件查询
        LambdaQueryWrapper<ApUserRealname> lambdaQueryWrapper=new LambdaQueryWrapper<>();
        //之所以能判断为空  是因为用的是包装类statsus
        //基本数据类型没有不为空的概念
        if (dto.getStatus() != null){
            lambdaQueryWrapper.eq(ApUserRealname::getStatus,dto
                    .getStatus());
        }
        //
        Page<ApUserRealname> page=new Page<>(dto.getPage(),dto.getSize());
        IPage<ApUserRealname> iPage=this.page(page,lambdaQueryWrapper);

        ResponseResult responseResult=new PageResponseResult(dto.getPage(),dto.getSize(),(int)page.getTotal());//向上转型
        responseResult.setData(iPage.getRecords());
        return responseResult;
    }

    /**
     * 用户实名认证（自动审核  人工审核）
     * 缺失 :如何触发自动审核方法
     * @param dto
     * @return
     */
    @Override
    public ResponseResult AutoUpdateStatus(AuthDto dto) {
        System.out.println("获取的id"+dto.getId());
//        Boolean flag=true;//定义一个全局变量
//        //参数为空
//        if (dto==null){
//            CatchCustomException.catchs(UserStatusCode.PARAM_FAIL,"参数非法");
//        }
//        //1、根据id查询用户实名认证信息
//        ApUserRealname apUserRealname=this.getById(dto.getId());
//        if (apUserRealname==null){
//            CatchCustomException.catchs(UserStatusCode.PARAM_FAIL,"认证用户信息有误！");
//        }
//        //2、状态为待审核状态进入审核流程  0创建中  1 待审核  2 审核失败  8自动审核失败  9审核通过
//        if (apUserRealname.getStatus()!=1){
//            CatchCustomException.catchs(UserStatusCode.PARAM_FAIL,"当前数据状态有误，请检查之后重试！");
//        }
//        //3、3.1 先进性身份认证  3.2 活体检测  3.3. 人证合一
//        //现根据身份证正面照片进行身份证OCR识别
//        Map map=new HashMap();
//        // image：身份证照片    imageType：图片类型（url图片路径）   ocrType：ocr类型  0是身份证正面  1是身份证反面
//        map.put("image",apUserRealname.getFontImage());//身份证正面照
//        map.put("imageType","URL");
//        map.put("ocrType","0");//身份证正面
//        ResponseEntity<String> ocrEntity= YongYouYunAuthUtils.conns("https://api.yonyoucloud.com/apis/dst/IdcardOCR/IdcardOCR"," 5a3aa88de3bd46c29f381f03f32aa26a",map);
//        //把json串转为map集合
//        Map OcrMap= JSON.parseObject(ocrEntity.getBody(),Map.class);
//        Map data=JSON.parseObject(OcrMap.get("data")+"",Map.class);
//        String cardNum=(String)data.get("cardNum");
//        String name=(String)data.get("name");
//        System.out.println(cardNum);
//        if ("成功".equals(OcrMap.get("message"))){
//            //        调用  身份证二要素接口
//            Map map1=new HashMap();
//            //两个参数  idNumber:身份证号码
//            map1.put("idNumber",cardNum);
//            map1.put("userName",name);
//            ResponseEntity<String> matchIdentity=YongYouYunAuthUtils.conns("https://api.yonyoucloud.com/apis/dst/matchIdentity/matchIdentity    ","63014e9fa11f4691899033ff004ab26f",map1);
//            Map matchIdentityMap= JSON.parseObject(matchIdentity.getBody(),Map.class);
//            Map data1 = JSON.parseObject(matchIdentityMap.get("data") + "", Map.class);
//            if ("成功".equals(matchIdentityMap.get("message"))){
//                //        调用活体检测 live_image  //判断601200000 && score？90分
//                Map map2=new HashMap();
//                //两个参数  image:自拍照  imageType:图片类型
//                map2.put("image",apUserRealname.getLiveImage());//自拍照
//                map2.put("imageType","URL");
//                ResponseEntity<String> Biologicalexamination=YongYouYunAuthUtils.conns("https://api.yonyoucloud.com/apis/dst/Biologicalexamination/Biologicalexamination ","5075bb7556a84111920d3471d2da4545",map2);
//                Map BiologicalexaminationMap= JSON.parseObject(matchIdentity.getBody(),Map.class);
//                Map data2 = JSON.parseObject(matchIdentityMap.get("data") + "", Map.class);
//                Integer score = (Integer)data2.get("score");
//                if ("成功".equals(BiologicalexaminationMap.get("message")) || score>90){
//                    //人像对比
//                    Map map3=new HashMap();
//                    //两个参数  idCardImagestring:身份证正面照  imageType：图片类型 liveImage
//                    map3.put("idCardImagestring",apUserRealname.getLiveImage());
//                    map3.put("imageType","URL");
//                    map3.put("liveImage",apUserRealname.getLiveImage());
//                    ResponseEntity<String> ComparisonsofPersonsandDocuments=YongYouYunAuthUtils.conns("https://api.yonyoucloud.com/apis/dst/ComparisonsofPersonsandDocuments/ComparisonsofPersonsandDocuments","901b479a7aa44c72bdb8d5cf264d27b7",map3);
//                    Map ComparisonsofPersonsandDocumentsMap= JSON.parseObject(matchIdentity.getBody(),Map.class);
//                }else {
//                    flag = true;
//                }
//            }else {
//                flag=false;
//            }
//        }else {
//            flag=false;
//        }
////        成功和失败  成功---》创建自媒体账号--》创建作者账号
//        if (flag){
//            //当前状态改为9
//            apUserRealname.setStatus((short)9);
//            this.updateById(apUserRealname);
//        }else {
//            //        失败：直接修改状态==8
//                apUserRealname.setStatus((short)8);
//                this.updateById(apUserRealname);
//        }
//        //结果不用给前端返回，所以返回空即可
        return null;
    }

    /**
     * 人工审核
     * @param dto
     * @param status
     * @return
     */
    @Override
    public ResponseResult updateStatus(AuthDto dto, Short status) {
     //判断参数
        if (dto==null || dto.getId()==null){
            CatchCustomException.catchs(UserStatusCode.PARAM_FAIL,"参数不合法");
        }
        //获取人工审核的id
        ApUserRealname realname = apUserRealnameMapper.selectById(dto.getId());
        if (dto.getMsg()==null){
            realname.setStatus(status);
         apUserRealnameMapper.updateById(realname);
         return ResponseResult.okResult(AppHttpCodeEnum.SUCCESS);//返回信息
        }
        //当msg不为空时,成功状态
        realname.setStatus(status);
        realname.setReason(dto.getMsg());
        apUserRealnameMapper.updateById(realname);
        return ResponseResult.okResult(AppHttpCodeEnum.SUCCESS);//返回信息
    }

    //身份认证 （人工审核） 先去实名认证表中（ap_user_realname）查询身份认证相关联俄实名认证信息 是否状态是9  只有状态为9的数据，才可以进行身份认证，
    //身份认证成功之后  才需要创建自媒体账号  以及作者账号




}
